/**
 *
 */
package com.dkm.nettysocketdemo.untils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 文件工具类
 * @author liandyao
 * @date 2017年10月12日 下午3:28:42
 * @version 1.0
 */
@Component
public class FileTools {

	static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");

	@Resource
	private  Config config ;
	/**
	 * 需要保存的文件地址和文件
	 * @param path 传入的地址名称,例如,会员模块,传入的地址是member,也可以是member/2017/这样的多重文件夹
	 * @param file 文件
	 * @return  地址字符串,注意,如果返回的是空,则说明没有选择上传文件
	 * @throws IOException
	 * @throws IllegalStateException
	 */
	public  String saveFile(String path, MultipartFile file) throws IllegalStateException, IOException {
		//原文件名
		String oriFileName = file.getOriginalFilename();
		if(Tools.isEmpty(oriFileName)){
			return null ;
		}
		//得到后缀
		String hz = oriFileName.substring(oriFileName.lastIndexOf("."));
		//新文件名
		String newFileName = Tools.getTimeStamp()+"&"+Tools.getRandomString(8)+""+hz;
		//存储的目标地址
		String targetPath = config.getDir() ;
		//如果配置的文件为空
		if(Tools.isEmpty(targetPath)){
			return "未配置文件存储文件夹";
		}
		//加上月份
		path = path+"/"+sdf.format(new Date());
		File fileNew=new File(targetPath+"/"+path);
		if(!fileNew.exists()){
			//创建新的文件夹
			fileNew.mkdirs();
		}

		//数据库保存地址
		String dataBasePath = path+"/"+newFileName;
		targetPath +="/"+dataBasePath;
		File targetFile = new File(targetPath);
		file.transferTo(targetFile);
		return config.getPath()+""+dataBasePath;
	}

	/**
	 * 二维码生成
	 *
	 * @param text     二维码内容
	 * @param width    二维码宽
	 * @param height   二维码高
	 * @param filePath 存储地址
	 * @throws WriterException 输出流异常
	 * @throws IOException     IO异常
	 */
	public String generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
		QRCodeWriter qrCodeWriter = new QRCodeWriter();

		BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

		//新文件名
		String newFileName = Tools.getTimeStamp() + "_" + Tools.getRandomString(8) + ".png";
		//存储的目标地址
		String targetPath = config.getDir();
		//如果配置的文件为空
		if (Tools.isEmpty(targetPath)) {
			return "未配置文件存储文件夹";
		}
		//加上月份
		filePath = filePath + "/" + sdf.format(new Date());
		File fileNew = new File(targetPath + "/" + filePath);
		if (!fileNew.exists()) {
			//创建新的文件夹
			fileNew.mkdirs();
		}

		Path path = FileSystems.getDefault().getPath(targetPath + "/" + filePath + "/" + newFileName);

		MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);

		return config.getPath() + "" + filePath + "/" + newFileName;
	}

	public static void main(String[] args) {
		String str="789.jkl.jpg";
		String hz = str.substring(str.lastIndexOf("."));
		System.out.println(hz);
	}
}
